home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Whiteline: delta
/
whiteline CD Series - delta.iso
/
tex
/
style
/
misc
/
bnf.sty
< prev
next >
Wrap
Text File
|
1995-11-25
|
5KB
|
166 lines
%%
%% This is file `bnf.sty', generated on <1993/2/16>
%% with the docstrip utility (2.0r).
%%
%% The original source file was `bnf.doc'.
%% Included options: `style'.
%%
%%
%% IMPORTANT NOTICE:
%% You are not allowed to distribute this file.
%% For distribution of the original source see
%% the copyright notice in the file bnf.doc.
%%
\def\filename{BNF.DOC}
\def\fileversion{1.05}
\def\filedate{09 Feb 1993 15:16:48 BST}
\def\docdate{09 Feb 1993 15:16:48 BST}
%%% ====================================================================
%%% @LaTeX-file{
%%% filename = "BNF.DOC",
%%% version = "1.05",
%%% date = "09 Feb 1993",
%%% time = "15:16:48 BST",
%%% author = "Mike Piff",
%%% address = "Dr M. J. Piff
%%% University of Sheffield
%%% Department of Pure Mathematics
%%% Hicks Building
%%% Hounsfield Road
%%% SHEFFIELD S3 7RH
%%% England",
%%% codetable = "ISO/ASCII",
%%% telephone = "+44 742 824431",
%%% email = "M.Piff@shef.ac.uk (Janet)",
%%% keywords = "Backus,Naur,syntax,grammar",
%%% supported = "yes",
%%% checksum = "15432 526 2399 20401",
%%% docstring = "A style option to LaTeX for producing
%%% Backus-Naur Form syntax notation.",
%%% }
%%% ====================================================================
%% This is BNF.DOC
%% Copyright (C) 1993 Mike Piff
%% All rights reserved.
%% Copying of this file is authorized only if
%% you make absolutely no changes to your copy.
%%
%% Usage:
%% \documentstyle[bnf]{article} %% in LaTeX
%<+driver> \DocInput{BNF.DOC}
\typeout{Backus-Naur Form style option for LaTeX, (c) Mike Piff, \filedate}
\newif\ifnonterminal
\def\NonTerminal{\left\langle\obeyspaces\ControlSpaces
\nonterminaltrue\NonTerminalStyle}
\def\endNonTerminal{\right\rangle}
\def\NonTerminalStyle{\fam0 }
{\obeyspaces\gdef\ControlSpaces{\let =\ }}
\def\Star{\,\left\{} \def\endStar{\right\}\,}
\def\Optional{\,\left[} \def\endOptional{\right]\,}
\def\Bracket{\,\left(} \def\endBracket{\right)\,}
\def\OR{\mathop{\left|\right.}\nolimits}
\def\Production{\mathrel{\longrightarrow}}
\def\Yields{\mathrel{\Longrightarrow}}
\def\Empty{\varepsilon}
\begingroup
\catcode`\`=\active
\gdef\TerminalFont{\tt \catcode96\active
\def`{\leavevmode\kern\z@\char96 }}
\endgroup
\begingroup
\catcode`\~=\active
\lccode`\~=`\^^M
\lowercase{\endgroup
\gdef\Terminal{\relax\PreTerminal
\ifmmode \hbox \else \leavevmode\null \fi
\bgroup
\TerminalFont
\catcode`~\active
\def~{\egroup\@latexerr{Terminal string ended by
end of line.}\@ehc}%
\let\do\@makeother \dospecials
\@sTerminal}}
\def\@sTerminal#1{%
\catcode`#1\active
\lccode`\~`#1%
\lowercase{\def~{\egroup\PostTerminal}}}%
\def\PreTerminal{} \def\PostTerminal{}
\mathchardef\lt="313C \mathchardef\gt="313E
\def\mathactive{"8000}
\def\bnf{%
\mathchardef\HYPHEN="2D \mathchardef\MINUS="2200
\mathchardef\Relbar="303D \def\relbar{\mathrel{\smash{\MINUS}}}
\mathchardef\EQUALS="303D
\mathcode`"=\mathactive
\mathcode`[=\mathactive \mathcode`\]=\mathactive
\mathcode`(=\mathactive \mathcode`\)=\mathactive
\mathcode`|=\mathactive \mathcode`-=\mathactive
\mathcode`<=\mathactive \mathcode`\>=\mathactive
\mathcode`@=\mathactive \mathcode`==\mathactive
\mathcode96 \mathactive
}
\def\endbnf{}
\def\NotInNonTerminal{\errmessage{Not allowed in a non-terminal}}
\def\NotNTdef#1#2{\gdef#1{\ifnonterminal\NotInNonTerminal\else#2\fi}}
\begingroup
\catcode`"\active
\catcode`[\active \catcode`\]\active
\catcode`(\active \catcode`\)\active
\catcode`|\active \catcode`-\active
\catcode`<\active \catcode`>\active
\catcode`@\active \catcode`=\active
\catcode96 \active
\gdef"{\Terminal"}%
\gdef`{\Terminal`}%
\NotNTdef[\Optional \NotNTdef]\endOptional
\NotNTdef(\Bracket \NotNTdef)\endBracket
\NotNTdef|\OR \NotNTdef<\NonTerminal
\gdef>{\endNonTerminal}%
\gdef-{%
\ifnonterminal
\def\Nnext{\HYPHEN}%
\else
\def\Nnext{\futurelet\Next\SeeIfProdn}%
\fi\Nnext}
\gdef={%
\ifnonterminal
\def\Nnext{\NotInNonTerminal}%
\else
\def\Nnext{\futurelet\Next\SeeIfYields}%
\fi\Nnext}%
\gdef@{% either an escape char or a star group
\ifnonterminal
\def\Nnext{\NotInNonTerminal}%
\else
\def\Nnext{\futurelet\Next\SeeIfSpecial}%
\fi\Nnext}%
\endgroup
\def\SeeIfProdn{%
\if\noexpand\Next\noexpand>%
\def\Nnext{\Production\@gobble}%
\else
\def\Nnext{\MINUS}%
\fi
\Nnext}
\def\SeeIfYields{%
\if\noexpand\Next\noexpand>%
\def\Nnext{\Yields\@gobble}%
\else
\def\Nnext{\EQUALS}%
\fi\Nnext}
\def\SeeIfSpecial{%
\if\noexpand\Next\noexpand<%
\def\Nnext{\lt\@gobble}%
\else
\if\noexpand\Next\noexpand>%
\def\Nnext{\gt\@gobble}%
\else
\def\Nnext{\Star\bgroup\aftergroup\endStar\aftergroup\egroup}%
\fi
\fi\Nnext}
\endinput
%%
%% End of file `bnf.sty'.
ə